/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package client;

/*
 * TCPClient.java
 *
 * Version 2.0
 * Vorlesung Rechnernetze HAW Hamburg
 * Autor: M. Hübner (nach Kurose/Ross)
 * Zweck: TCP-Client Beispielcode:
 *        TCP-Verbindung zum Server aufbauen, einen vom Benutzer eingegebenen
 *        String senden, den String in Großbuchstaben empfangen und ausgeben
 */
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class TCPClient {

    public static final int SERVER_PORT = 50000;
    //public static final String hostname;
    private Socket clientSocket; // TCP-Standard-Socketklasse
    private DataOutputStream outToServer; // Ausgabestream zum Server
    private BufferedReader inFromServer;  // Eingabestream vom Server
    private boolean serviceRequested = true; // Client beenden?

    public void closeSocket() {
        try {
            clientSocket.close();
        } catch (IOException e) {
        }
    }

    public void startJob(String hostname) throws IOException {
        /* Client starten. Ende, wenn quit eingegeben wurde */
        Scanner inFromUser;
        String sentence; // vom User übergebener String
        String modifiedSentence; // vom Server modifizierter String

        /* Ab Java 7: try-with-resources mit automat. close benutzen! */
            /* Socket erzeugen --> Verbindungsaufbau mit dem Server */
            //clientSocket = new Socket(hostname, SERVER_PORT);
            clientSocket = new Socket(InetAddress.getByName(hostname), SERVER_PORT);

            /* Socket-Basisstreams durch spezielle Streams filtern */
            outToServer = new DataOutputStream(clientSocket.getOutputStream());
            inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));



            /* Konsolenstream (Standardeingabe) initialisieren */
            //inFromUser = new Scanner(System.in);

//      while (serviceRequested) {
//        System.out.println("ENTER TCP-DATA: ");
//        /* String vom Benutzer (Konsoleneingabe) holen */
//        sentence = inFromUser.nextLine();
//
//        /* String an den Server senden */
//        writeToServer(sentence);
//
//        /* Modifizierten String vom Server empfangen */
//        modifiedSentence = readFromServer();
//
//        /* Test, ob Client beendet werden soll */
//        if (modifiedSentence.indexOf("QUIT") > -1) {
//          serviceRequested = false;
//        }
//      }

            /* Socket-Streams schließen --> Verbindungsabbau */
            //clientSocket.close();


        System.out.println("TCP Client stopped!");
    }

    public String writeToServer(String request) {
        /* Sende den request-String als eine Zeile (mit newline) zum Server */
        String serverAnswer = "";
        try {
            outToServer.writeBytes(request + '\n');
            boolean swappedCase = false;
            for (String part : this.readFromServer().split(" ")) {
                if (!swappedCase) {
                    serverAnswer = part.toUpperCase();
                    swappedCase = true;
                } else {
                    serverAnswer += " " + part;
                }
            }
            serverAnswer = serverAnswer.trim();
        } catch (IOException e) {
            System.err.println(e.toString());
            //serviceRequested = false;
        }
        System.out.println("TCP Client has sent the message: " + request);
        return serverAnswer;
    }

    public String readFromServer() {
        /* Liefere die Antwort (reply) vom Server */
        String reply = "";

        try {
            reply = inFromServer.readLine();
        } catch (IOException e) {
            System.err.println("Connection aborted by server!");
            //serviceRequested = false;
        }
        System.out.println("TCP Client got from Server: " + reply);
        return reply;
    }
}
